perm filename NXM.FAI[TMP,LCS]7 blob sn#443270 filedate 1979-05-20 generic text, type T, neo UTF8
00100	TITLE XM
00200		;↓↓AC DEF
00300	A←1
00400	B←2
00500	C←3
00600	D←4
00700	E←5
00800	L←6
00900	U←7
01000	X←11
01100	Y←12
01200	XD←13
01300	T←15
01400	TT←16
01500	P←17
01600		
01700	LPDL←←69
01800	NBUFS←←4
01900	DSK←←1
02000	XGP←←2
02100	
02200	LMAR←←=0
02300	RMAR←←=1699
02400	WIDTH←←=1700
02500	LBUFL←←=48	;LINE LENGTH IN WORDS
02600	
02700	LSTBIT←←1⊗34
02800	
02900	OVERLAP←←=50
03000	
03100	DOFF←←-=760
03200	
03300	EXTERN JOBREL,JOBFF,JOBTPC,JOBAPR,JOBCNI
03400	MAILBF:	BLOCK 40
03500	SIGN:	0
03600	LINE:	0
03700	PNTR:	0
03800	
     

00100	BEG:	SETOM LINE
00200		GETLIN LINE		;FOR ERROR PRINTOUT
00300		CALLI
00400		HRRZS LINE		;CLEAR LINE BITS
00500		HRRZI A,CORUP
00600		HRRZM A,JOBAPR
00700		SETOM SSS#
00800		HRRZ A,JOBFF		;RESET CORE WITHOUT A RESET
00900		CORE A,
01000		JRST 4,.
01100	
01200	;FLUSHED BY REG  1-3-76
01300	;	MOVE A,[IPC:20000 ↔ 0]
01400	;	INTENB A,
01500	;
01600	;ADDED BY REG:
01700		MOVEI	A,20000		;REG  MPV
01800		APRENB	A,		;REG  ENABLE OLD WAY!
01900	
02000		MOVE P,[-LPDL,,PDL-1]
02100	;Z	OUTSTR [ASCIZ /OLD? /]
02200		SETZM BIGBOT#
02300		SETZM GO#
02400				;NEXT LINE REPLACES FOLLOWING ;Z SECTION.
02500		JRST FILIN	;******* NO 'OLD' FEATURE IN THIS VERSION. ******
02600	
02700	;Z	INCHWL E
02800	;Z	CAIE E,"B"		; B FOR BIG BOTTOM MARGIN (200=1")
02900	;Z	CAIN E,"b"
03000	;Z	CAIA
03100	;Z	JRST .+3
03200	;Z	SETOM BIGBOT
03300	;Z	JRST GOGO-1
03400	;Z	CAIE E,"L"		; L FOR LEGAL SIZE
03500	;Z	CAIN E,"l"
03600	;Z	JRST LEGLEG
03700	;Z	CAIE E,"G"		;IF 'G' SKIP ALL PROMPTS
03800	;Z	CAIN E,"g"
03900	;Z	CAIA
04000	;Z	JRST PASS
04100	;Z	PUSHJ P,FRD		;GO GET DEFAULT FILE NAME.
04200	GONEW:	PUSHJ P,FRD		;GO GET DEFAULT FILE NAME.
04300	GOGO:	MOVEI =11		;DEFAULT PAGE LENGTH = 11" WITH 'G'
04400		JRST GOGOGO
04500	LEGLEG:	PUSHJ P,FRD
04600	LEGAL:	MOVEI =14		;TYPE 'L' FOR LEGAL SIZE 14"
04700	GOGOGO:	MOVEM GO
04800	;;;	SETOM GO		;FOR SKIPING ALL PROMPTS
04900	;	INCHWL E
05000	;	INCHWL E		 GET THE CRLF
05100		CLRBFI			;INSTEAD OF ↑↑
05200	OUTSTR [ASCIZ/USING DEFAULT VALUES.
05300	/]
05400		SETZM ROFLG#
05500		HRREI B,-60	;??
05600		JRST PASS2
05700	;ZPASS:	CAIE E,"Y"
05800	;Z	CAIN E,"y"
05900	;Z	JRST INBITS
06000	;Z	CLRBFI
06100		SETZM SPREAD#
06200	FILIN:	OUTSTR [ASCIZ /FILE? (DEFAULT=PLT.PLT) /]
06300		PUSHJ P,FRD
06400		SKIPE GO
06500		JRST GONEW	;IF 'G' IS NAME THEN USE DEFAULT VALUES.
06600		SETZ A,
06700	YAGN1:	HRREI B,-60
06800		SETZM ROFLG
06900	OUTSTR [ASCIZ/ROTATE? /]		;YOU CAN TYPE 'G' FOR GO HERE TOO.
07000		INCHWL E
07100		CAIE E,"Y"
07200		CAIN E,"y"
07300		SETOM ROFLG
07400		CAIE E,"G"
07500		CAIN E,"g"
07600		JRST GOGO
07700		CAIE E,"L"
07800		CAIN E,"l"
07900		JRST LEGAL
08000		CLRBFI
08100	OUTSTR [ASCIZ/ORIGIN X RIGHT OFFSET RIGHT (DEFAULT=4(CENTER))? /]
08200		PUSHJ P,RNUM
08300		JRST [	PASS2:	HRREI A,-=760 
08400				JRST YDEF]	;GET Y INFO
08500		IMULI A,=100
08600		CAIN C,"."		;DECIMAL POINT?
08700		JRST [	INCHWL C
08800			CAIN C,15
08900			INCHWL C
09000			CAIL C,"0"
09100			CAILE C,"9"
09200			JRST .+1
09300			SUBI C,60
09400			IMULI C,=10
09500			SKIPE SIGN
09600			MOVN C,C
09700			ADD A,C
09800			PUSH P,A
09900			PUSHJ P,RNUM
10000			JFCL
10100			POP P,A
10200			JRST .+1]	;.+1??
10300		MOVN A,A
10400		LSH A,1			;*2 (MAKE IT STEPS)
10500	YDEFP:	CAIE C,12
10600		JRST [	CLRBFI
10700			JRST YAGN1]
10800	YDEF:	ADD A,B
10900		MOVNM A,INIX#
11000	AGAIN:	MOVE A,[FILNAM,,LKENT]
11100		BLT A,LKENT+3
11200		OPEN DSK,[14↔'DSK   '↔IBUF]
11300		JRST 4,.
11400		INBUF DSK,NBUFS
11500		LOOKUP DSK,LKENT
11600		JRST FNF
11700	ASKLEN:	SETZM POOBX#
11800		SETZM POOBY#
11900		PUSHJ P,XINI		;GET X INFO
12000	;	JRST CORLUZ
12100		SETZM XX#
12200		SETZM YY#
12300		MOVEI C,3
12400		HRRZM C,PENN#
12500	OUTER:	IN DSK,
12600		JRST PLOT
12700		STATO DSK,20000
12800		JRST 4,.
12900		RELEAS DSK,
13000	IFN LSTBIT-1,<PUSHJ P,XFIX>
13100		JRST PCUT
13200	
     

00100	XINI:	SKIPN GO
00200		OUTSTR [ASCIZ /LENGTH IN INCHES (Y DIMENSION, DEFAULT=11)? /]
00300		SETZM DEFA#
00400		SKIPE GO
00500		JRST PASSD
00600		PUSHJ P,RNUM
00700		SETOM DEFA		;ASSUME 11 INCHES
00800		JUMPLE A,[XINLER:CLRBFI
00900			JRST XINI]
01000		SKIPGE DEFA		;? GO?
01100	PASSD:	HRRZI A,=11
01200		SKIPE GO
01300		MOVE A,GO
01400	;;PASSD:	MOVE A,GO		;EITHER 11 OR 14
01500		CAIE C,12
01600		JRST XINLER
01700		IMULI A,=200
01800		PUSH P,A
01900	YINI1:	SKIPE GO
02000		JRST PASS3
02100		SKIPL ROFLG
02200		OUTSTR [ASCIZ \ORIGIN Y BOTTOM OFFSET, 200/IN.(DEFAULT=75)? \]
02300		SKIPGE ROFLG
02400		OUTSTR [ASCIZ \ORIGIN Y BOTTOM OFFSET, 200/IN.(DEFAULT=1000)? \]
02500		PUSHJ P,RNUM
02600	PASS3:	JRST [	MOVEI A,=75
02700			SKIPE BIGBOT	;BIGBOT=NEG=200 BOTTOM MARGIN
02800			MOVEI A,=200
02900			SKIPGE ROFLG
03000			MOVEI A,=1000
03100			JRST IYDEF]
03200		CAIE C,12
03300		JRST [	CLRBFI
03400			JRST YINI1]
03500	IYDEF:	IMULI A,LBUFL+1
03600		MOVEM A,IYPOS#
03700		POP P,A
03800	XDEF:	MOVEM A,LINCNT#
03900		MOVEI B,-1(A)
04000		IMULI A,LBUFL+1		;A← BUFSIZ ← ROWS * COL
04100		MOVE T,JOBFF		;GET START ADDR
04200		MOVEM T,XGPPTR
04300		SOS XGPPTR
04400		MOVEI T,2(A)
04500		MOVNI TT,(T)
04600		ADD T,XGPPTR
04700		HRLM TT,XGPPTR		;XGPPTR← -WDCNT,,ADDR-1
04800		MOVE TT,T
04900	
05000		HRRZ L,XGPPTR
05100		MOVSI T,1(L)
05200		HRRI T,2(L)
05300	 	SETZM 1(L)
05400	 	MOVE U,JOBREL
05500	 	BLT T,(U)		;ZERO TO END OF CORE
05600		HRRZI U,(TT)
05700		MOVEM B,SVBBB#
05800		
05900		MOVE Y,IYPOS
06000		ADDI Y,2(L)
06100		MOVEI XD,DBUF+1
06200		SKIPL A,INIX		;WHERE DO WE START
06300		JRST MAYBON
06400		SUBI A,43
06500		IDIV A,[-44]
06600		HRLOI X,XD
06700		SOJA A,SETB
06800	
06900	MAYBON:	ADDI A,43
07000		IDIVI A,44
07100		CAILE A,LBUFL
07200		JRST OFFRT
07300		MOVE X,A
07400		SETZ A,
07500		HRLI X,Y
07600		JRST SETB
07700	
07800	OFFRT:	MOVE X,[XD,,LBUFL]
07900		SUBI A,LBUFL
08000	SETB:	MOVE B,INIX
08100		IDIVI B,44
08200		MOVSI B,400000
08300		MOVN C,C
08400		ROT B,(C)
08500		POPJ P,
08600	
08700	POPJ1:	AOS (P)
08800	CPOPJ:	POPJ P,
08900	
     

00100		MOVE A,E	;ROTATION
00200	ROTA:	MOVE 14,2(A)
00300		LSHC 14,-10
00400		HLLZ C,15
00500		LSHC 14,-16
00600		HLLZ D,15
00700		LSHC 14,-16
00800		EXCH 15,D
00900		LSHC 14,16
01000		ASH D,-26
01100		MOVN 15,D
01200		LSH 15,26
01300		LSHC 14,16
01400		HLLZ 15,C
01500		LSHC 14,10
01600		MOVEM 14,2(A)
01700		AOBJN A,ROTA
01800		JRST PLOT1
01900	
02000	PLOT:	HRR C,IBUF+1
02100		MOVN E,1(C)	;FIX FOR NO WDCNT
02200		MOVSI E,(E)
02300		HRR E,IBUF+1
02400		SKIPGE ROFLG
02500		JRST ROTA-1
02600	PLOT1:	MOVE 14,2(E)
02700		LSHC 14,-10
02800		ASH 15,-34
02900		MOVEM 15,SVPEN#		;GET PEN CODE
03000		MOVM A,15
03100		LSHC 14,-16
03200		ASH 15,-26
03300		MOVEM 15,SVY#		;GET Y
03400		SUB 15,YY
03500		MOVEM 15,SVYSB#		;SAVE Y DIFF
03600		IMULI 15,LBUFL+1
03700		ADD 15,Y
03800		MOVEM 15,SVYOD#		;SAVE NEW Y
03900		CAIGE 15,(L)		;OFF TOP
04000		JRST LOSE
04100		CAIL 15,-LBUFL-1(U)	;OFF BOTTOM
04200		JRST LOSE
04300		LSHC 14,-16
04400		ASH 15,-26
04500		MOVEM 15,SVX#		;GET X
04600		SUB 15,XX
04700		MOVE 0,15		;0 HAS X DIFF
04800		HRRZ 16,X
04900		IMULI 16,44	;TIMES BITS INA WORD
05000		JFFO B,.+1	
05100		ADD 16,C	;PLUS REMAINDER EQ OLD X
05200		SUB 16,15
05300		JUMPL 16,LOSEX
05400		CAILE 16,=1727
05500		JRST LOSEX
05600		SKIPE OOBFLG#		;CK IF ALREADY OOB
05700		JRST OOBAR
05800	FIXUP:	CAIE A,1	;FIXUP WHAT?
05900		HRRM A,PENN
06000		HRR A,PENN	;SAME PEN IF 1
06100		CAIN A,3
06200		JRST PENUP	;PENUP IF 3
06300		MOVE C,SVYSB	;Y DIFF
06400		IORM B,@X	;MARK NOW X Y
06500				;FIND DIRECTION
06600		JUMPE NORMX	;VERT OR NO MOVE
06700		JUMPL MVLFT	;LEFT
06800		JUMPE C,NRT	;HORZ
06900		JUMPL C,MVDWN	;DOWN
07000		CAMLE C,0	;JUMP IF Y DIFF > X DIFF
07100		JRST XCHA
07200	
07300		SETZ 14,	;↓↓ MOVE UP AND RIGHT
07400		TLNE C,200000
07500		JRST .+4
07600		LSH C,1
07700		TRO C,1
07800		AOJA 14,.-4
07900		SUBI 14,=34
08000		IDIV C,0
08100		MOVNS 14
08200		LSH C,(14)
08300		SETZ 15,
08400	INLOOP:	ADD 15,C
08500		TLZE 15,200000
08600		ADDI Y,LBUFL+1
08700		SKIPGE B
08800		SOJ X,
08900		ROT B,1
09000		IORM B,@X
09100		SOJG INLOOP
09200		JRST DONXT
09300	
     

00100	XCHA:	SETZ 14,	;↓↓MOVE UP AND RIGHT
00200		TLNE 0,200000
00300		JRST .+4
00400		LSH 0,1
00500		TRO 0,1
00600		AOJA 14,.-4
00700		SUBI 14,=34
00800		IDIV 0,C
00900		MOVNS 14
01000		LSH 0,(14)
01100		SETZ 15,
01200	INLOO:	ADD 15,0
01300		TLZN 15,200000
01400		JRST MVUP
01500		SKIPGE B
01600		SOJ X,
01700		ROT B,1
01800	MVUP:	ADDI Y,LBUFL+1
01900		IORM B,@X
02000		SOJG C,INLOO
02100		JRST DONXT
02200	
02300	MVDWN:	MOVMS C		;↓↓MOVE DOWN AND RIGHT
02400		CAMLE C,0
02500		JRST XCHA2	;JUMP IF YDIFF > XDIFF
02600		SETZ 14,
02700		TLNE C,200000
02800		JRST .+4
02900		LSH C,1
03000		TRO C,1
03100		AOJA 14,.-4
03200		SUBI 14,=34
03300		IDIV C,0
03400		MOVNS 14
03500		LSH C,(14)
03600		SETZ 15,
03700	INLOP:	ADD 15,C
03800		TLZE 15,200000
03900		SUBI Y,LBUFL+1
04000		SKIPGE B
04100		SOJ X,
04200		ROT B,1
04300		IORM B,@X
04400		SOJG INLOP
04500		JRST DONXT
04600	
04700	XCHA2:	SETZ 14,	;↓↓MOVE DOWN AND RIGHT
04800		TLNE 0,200000
04900		JRST .+4
05000		LSH 0,1
05100		TRO 0,1
05200		AOJA 14,.-4
05300		SUBI 14,=34
05400		IDIV 0,C
05500		MOVNS 14
05600		LSH 0,(14)
05700		SETZ 15,
05800	INOOP:	ADD 15,0
05900		TLZN 15,200000
06000		JRST MVEX
06100		SKIPGE B
06200		SOJ X,
06300		ROT B,1
06400	MVEX:	SUBI Y,LBUFL+1
06500		IORM B,@X
06600		SOJG C,INOOP
06700		JRST DONXT
06800	
06900	NRT:	JUMPL B,GOOP	;HORZ RIGHT
07000	TOOT:	ROT B,1
07100		IORM B,@X
07200		SOJG 0,NRT
07300		JRST DONXT
07400	GOOP:	SOJ X,
07500		CAIGE 0,44
07600		JRST TOOT
07700		IDIVI 0,44
07800		SETOM @X
07900		SOJ X,
08000		SOJG 0,.-2
08100		HRR 0,1
08200		JUMPN 0,TOOT
08300		AOJ X,
08400		JRST DONXT
08500	
08600	NLFT:	MOVMS 0		;HORZ LEFT
08700		ROT B,-1
08800		JUMPL B,ROOT
08900	WOOP:	IORM B,@X
09000		SOJG 0,.-3
09100		JRST DONXT
09200	ROOT:	AOJ X,
09300		CAIGE 0,44
09400		JRST WOOP
09500		IDIVI 0,44
09600		SETOM @X
09700		AOJ X,
09800		SOJG 0,.-2
09900		HRR 0,1
10000		JUMPN 0,WOOP
10100		SOJ X,
10200		ROT B,1
10300		JRST DONXT
10400	NORMX:	JUMPE C,NOMOVE	;NO DIFF
10500		JUMPL C,MDOWN	;MOVE VERT DOWN
10600	MUP:	ADDI Y,LBUFL+1	;MOVE VERT UP
10700		IORM B,@X
10800		SOJG C,MUP
10900		JRST DONXT
11000	MDOWN:	SUBI Y,LBUFL+1	;MOVE VERT DOWN
11100		IORM B,@X
11200		AOJL C,MDOWN
11300	DONXT:	MOVE 4,SVX	;DONE. NOW UPDATE X AND Y
11400		MOVEM 4,XX
11500	NXTY:	MOVE 4,SVY
11600		MOVEM 4,YY
11700	NOMOVE:	SKIPL SVPEN
11800		JRST ENOUT
11900		SETZM XX	;IF NEW LOCO
12000		SETZM YY
12100	ENOUT:	AOBJN E,PLOT1	;GET NEXT
12200		JRST OUTER
12300	
     

00100	MVLFT:	MOVMS 0		;MOVE LEFT THEN RIGHT
00200		MOVMS 15
00300		JUMPE C,NLFT
00400		HRR Y,SVYOD
00500		IDIVI 15,44
00600		ADD X,15
00700	XEND:	SOJL 16,DUN
00800		ROT B,-1
00900		JUMPGE B,XEND
01000		AOJ X,
01100		JRST XEND
01200	DUN:	MOVEM X,XX	;SAVE NEW X POS
01300		MOVEM B,YY
01400		IORM B,@X
01500		JUMPL C,MVLD
01600		CAMLE C,0
01700		JRST XCHA3
01800		SETZ 14,	;MOVE LEFT UP
01900		TLNE C,200000
02000		JRST .+4
02100		LSH C,1
02200		TRO C,1
02300		AOJA 14,.-4
02400		SUBI 14,=34
02500		IDIV C,0
02600		MOVNS 14
02700		LSH C,(14)
02800		SETZ 15,
02900	ILOOP:	ADD 15,C
03000		TLZE 15,200000
03100		SUBI Y,LBUFL+1
03200		SKIPGE B
03300		SOJ X,
03400		ROT B,1
03500		IORM B,@X
03600		SOJG ILOOP
03700		JRST BFOR
03800	
03900	XCHA3:	SETZ 14,
04000		TLNE 0,200000
04100		JRST .+4
04200		LSH 0,1
04300		TRO 0,1
04400		AOJA 14,.-4
04500		SUBI 14,=34
04600		IDIV 0,C
04700		MOVNS 14
04800		LSH 0,(14)
04900		SETZ 15,
05000	ILOP:	ADD 15,0
05100		TLZN 15,200000
05200		JRST DOQ
05300		SKIPGE B
05400		SOJ X,
05500		ROT B,1
05600	DOQ:	SUBI Y,LBUFL+1
05700		IORM B,@X
05800		SOJG C,ILOP
05900		JRST BFOR
06000	
06100	MVLD:	MOVMS C		;MOVE LEFT DOWN
06200		CAMLE C,0
06300		JRST XCHA4
06400		SETZ 14,
06500		TLNE C,200000
06600		JRST .+4
06700		LSH C,1
06800		TRO C,1
06900		AOJA 14,.-4
07000		SUBI 14,=34
07100		IDIV C,0
07200		MOVNS 14
07300		LSH C,(14)
07400		SETZ 15,
07500	LOOP:	ADD 15,C
07600		TLZE 15,200000
07700		ADDI Y,LBUFL+1
07800		SKIPGE B
07900		SOJ X,
08000		ROT B,1
08100		IORM B,@X
08200		SOJG LOOP
08300		JRST BFOR
08400	
08500	XCHA4:	SETZ 14,
08600		TLNE 0,200000
08700		JRST .+4
08800		LSH 0,1
08900		TRO 0,1
09000		AOJA 14,.-4
09100		SUBI 14,=34
09200		IDIV 0,C
09300		MOVNS 14
09400		LSH 0,(14)
09500		SETZ 15,
09600	LOP:	ADD 15,0
09700		TLZN 15,200000
09800		JRST DOP
09900		SKIPGE B
10000		SOJ X,
10100		ROT B,1
10200	DOP:	ADDI Y,LBUFL+1
10300		IORM B,@X
10400		SOJG C,LOP
10500	
10600	BFOR:	HRR Y,SVYOD	;RESTORE PEN TO NEW PEN
10700		MOVE X,XX
10800		MOVE B,YY
10900		JRST DONXT
11000	
     

00100	OOBAR:	SETZM OOBFLG	; GET HERE IF ALL READY OOB
00200		AOSG SSS	; THIS IS FOR THE FIRST OOB FROM MP
00300		JRST FIXUP	;
00400	PENUP:	HRR Y,SVYOD	; PEN IS UP GET NEW Y
00500		JUMPE 15,NXTY	;IF VERT
00600		JUMPL 15,PULFT	;IF LEFT
00700		CAIGE 15,44	;↓↓MOVE UP PEN RIGHT TO NEW X
00800		JRST XLOOP
00900		IDIVI 15,44
01000		SUB X,15
01100		HRR 15,16
01200	XLOOP:	SOJL 15,DONXT
01300		SKIPGE B
01400		SOJ X,
01500		ROT B,1
01600		JRST XLOOP
01700	
01800	PULFT:	MOVMS 15	;↓↓MOVE UP PEN LEFT TO NEW X
01900		CAIGE 15,44
02000		JRST OOO
02100		IDIVI 15,44
02200		ADD X,15
02300		HRR 15,16
02400	OOO:	SOJL 15,DONXT
02500		ROT B,-1
02600		JUMPGE B,OOO
02700		AOJ X,
02800		JRST OOO
02900	
03000	LOSEX:	SETOM OOBFLG	;OOB X
03100		SKIPE POOBX
03200		JRST PENUP
03300		SETOM POOBX
03400		PUSHJ P,DETCHK
03500	 	 PUSHJ P,XERR
03600		PUSHJ P,ERRPNT
03700		ASCIZ /POINT OUT OF BOUNDS, /
03800		JUMPL 16,[PUSHJ P,ERRPNT
03900			  ASCIZ/-X/
04000			  JRST PENUP]
04100		PUSHJ P,ERRPNT
04200		ASCIZ/+X/
04300		JRST PENUP
04400	
04500	LOSE:	SETOM OOBFLG	;OOB Y
04600		SKIPE POOBY
04700		JRST LOBAC
04800		SETOM POOBY
04900		PUSHJ P,DETCHK
05000		PUSHJ P,XERR
05100		PUSHJ P,ERRPNT
05200		ASCIZ /POINT OUT OF BOUNDS, /
05300		CAIGE 15,(L)
05400		JRST [	PUSHJ P,ERRPNT
05500			ASCIZ/-Y/
05600			JRST LOBAC]
05700		PUSHJ P,ERRPNT
05800		ASCIZ/+Y/
05900	LOBAC:	LSHC 14,-16
06000		ASH 15,-26
06100		MOVEM 15,SVX
06200		SUB 15,XX
06300		JRST PENUP
06400	
06500	DECOUT:	IDIVI T,=10	;DEC TTY OUT
06600		HRLM TT,(P)
06700		SKIPE T
06800		PUSHJ P,DECOUT
06900		HLRZ TT,(P)
07000		ADDI TT,60
07100		ROT TT,-7
07200		MOVEM TT,.+2
07300		PUSHJ P,ERRPNT
07400		0
07500		POPJ P,
07600	
07700	ERRPNT:	HRRZ TT,(P)		;ERROR TTY OUT
07800		MOVEM TT,PNTR
07900		MOVEI TT,LINE
08000		TTYMES TT,
08100		JRST [	OUTSTR[ASCIZ/TTYMES FAILED	/]
08200			OUTSTR @PNTR
08300			OUTSTR[ASCIZ/
08400	/]
08500			JRST .+1]
08600		POP P,TT
08700		HRL TT,(TT)
08800		TLNE TT,376
08900		AOJA TT,.-2
09000		JRST 1(TT)
09100	
09200	XERR:	PUSHJ P,ERRPNT		;DET TTY OUT
09300		ASCIZ/
09400	MESSAGE FROM X WORKING ON /
09500		MOVE TT,FILNAM
09600		PUSHJ P,SIXOUT
09700		PUSHJ P,ERRPNT
09800		ASCIZ/./
09900		HLLZ TT,FILEXT
10000		PUSHJ P,SIXOUT
10100		PUSHJ P,ERRPNT
10200		ASCIZ/[/
10300		MOVE TT,FILPPN
10400		PUSHJ P,SIXOUT
10500		PUSHJ P,ERRPNT
10600		ASCIZ/] : /
10700		POPJ P,
10800	
10900	SIXOUT:	JUMPE TT,CPOPJ		;SIXBIT OUT
11000		SETZ T,
11100		LSHC T,6
11200		ADDI T,40
11300		PUSH P,TT
11400		ROT T,-7
11500		MOVEM T,.+2
11600		PUSHJ P,ERRPNT
11700		0
11800		POP P,TT
11900		JRST SIXOUT
12000	
12100	DETCHK:	SETOM DET#	;CK FOR DET JOB
12200		GETLIN DET
12300		HRRES DET
12400		SKIPL DET
12500		AOS (P)
12600		POPJ P,
12700	
     

00100	FINDL:	HRRZ A,JOBREL		;CK IF BIG ENUF
00200		CAIL A,-LBUFL-1(U)
00300		JRST XINL-1
00400	XL2:	MOVEM TT,(T)		;ADD MORE AND MARK
00500		ADDI T,LBUFL+1
00600		CAIGE T,(A)
00700		JRST XL2
00800		SUBI A,(L)
00900		MOVNS A
01000		HRLM A,XGPPTR
01100		SUBI T,LBUFL+1
01200		JRST XXOUT
01300	
01400	PCUT:	HRRZ L,XGPPTR				;MARK BLOCK FOR XGP
01500		MOVE TT,[BYTE (12)4001,LMAR,LBUFL]
01600		MOVEM TT,1(L)		;FIRST ONE HAS MARK AND CUT WITH IT
01700		TLZ TT,400000		;DELETE MARK AND CUT
01800		MOVEI T,1+LBUFL+1(L)
01900		SKIPGE DEFA
02000		JRST FINDL
02100		MOVE B,SVBBB
02200	XINL:	MOVEM TT,(T)
02300		ADDI T,LBUFL+1
02400		SOJG B,XINL
02500		HLRO TT,XGPPTR
02600		MOVNS TT
02700		ADDI TT,(L)
02800		MOVE A,(TT)
02900	XXOUT:	MOVSI TT,400100
03000		MOVEM TT,(T)		;SO DOES LAST
03100	
03200		SKIPN SPREAD
03300		JRST XGPOUT
03400	
03500		HRRZ T,XGPPTR
03600		ADDI T,LBUFL+1
03700		HRRZ C,SVBBB
03800	
03900		SKIPG SPREAD
04000		JRST NINE
04100	
04200	XLINE4:	HRLI T,-LBUFL
04300	
04400	XSHFT4:	MOVE A,2(T)
04500		MOVE B,3(T)
04600		ROTC A,1
04700		ORM A,2(T)
04800		AOBJN T,XSHFT4
04900		AOJ T,
05000		SOJG C,XLINE4
05100	
05200		HRRZ T,XGPPTR
05300		HRRZ B,SVBBB
05400		
05500	YLINE4:	HRLI T,-LBUFL
05600	
05700	YSHFT4:	MOVE A,LBUFL+3(T)
05800		ORM A,2(T)
05900		AOBJN T,YSHFT4
06000		AOJ T,		;Bump past control word.
06100		SOJG B,YLINE4
06200	
06300		JRST XGPOUT
06400	
06500	NINE:	HRLI T,-LBUFL
06600	
06700	XSHFT9:	MOVE A,2(T)
06800		MOVE B,3(T)
06900		ROTC A,1
07000		ORM A,2(T)
07100		ROTC A,1
07200		ORM A,2(T)
07300		AOBJN T,XSHFT9
07400		AOJ T,
07500		SOJG C,NINE
07600	
07700		HRRZ T,XGPPTR
07800		HRRZ B,SVBBB
07900	
08000	YLINE9:	HRLI T,-LBUFL
08100	
08200	YSHFT9:	MOVE A,LBUFL+LBUFL+4(T)
08300		OR A,LBUFL+3(T)
08400		ORM A,2(T)
08500		AOBJN T,YSHFT9
08600		AOJ T,
08700		SOJG B,YLINE9
08800	
08900	XGPOUT:	OPEN XGP,XNIT		;XGP OUTPUT
09000	;;;	PUSHJ P,NOXGP
09100		JRST NOXGP
09200		OUTSTR[ASCIZ/CRANKING XGP
09300	/]
09400		LOCK
09500	OUTIT:	OUT XGP,XGPPTR
09600		JRST OUTOK
09700	DSKERR:	PUSHJ P,DETCHK
09800		PUSHJ P,XERR
09900		PUSHJ P,ERRPNT
10000		ASCIZ /XGP OUTPUT ERROR.
10100	/
10200	OUTOK:	UNLOCK
10300		RELEAS XGP,
10400	XMORE:	PUSHJ P,DETCHK
10500	;;	JRST DODEL			;DELETE AUTOMATICALLY IF DETACHED
10600		JFCL
10700		OUTSTR[ASCIZ/D=DELETE, R=REPEAT, X=EXIT  /]
10800		INCHRW C
10900		CAIE C,15
11000		JRST .+3
11100		INCHRW C
11200		JRST XMORE+2			; WON'T ACCEPT JUST CRLF
11300		OUTSTR[ASCIZ/
11400	/]
11500		CAIE C,"X"
11600		CAIN C,"x"
11700		SKIPA
11800		JRST .+3
11900		PUSHJ P,CORDWN			;REALLY DONE, CORE DOWN
12000		JRST NODEL 
12100		CAIE C,"R"
12200		CAIN C,"r"
12300		JRST XGPOUT
12400		CAIE C,"D"
12500		CAIN C,"d"
12600		SKIPA   			;IF NOT R, X OR D TRY AGAIN.
12700		JRST XMORE+2
12800		PUSHJ P,CORDWN			;REALLY DONE, CORE DOWN
12900	DODEL:	MOVE A,[FILNAM,,LKENT]
13000		BLT A,LKENT+3
13100		INIT DSK,17
13200		'DSK   '
13300		0
13400		JRST [	SKIPGE DET
13500			PUSHJ P,XERR
13600			PUSHJ P,ERRPNT
13700			ASCIZ/COULDN'T GET DISK FOR DELETE!
13800	/
13900			JRST NODEL]
14000		LOOKUP DSK,LKENT
14100		JRST [	SKIPGE DET
14200			PUSHJ P,XERR
14300			PUSHJ P,ERRPNT
14400			ASCIZ/LOOKUP FOR DELETE FAILED!
14500	/
14600			JRST NODEL]
14700		MOVE A,FILPPN
14800		MOVEM A,LKENT+3
14900		SETZM LKENT
15000		RENAME DSK,LKENT
15100		CAIA
15200		JRST NODEL
15300		SKIPGE DET
15400		PUSHJ P,XERR
15500		PUSHJ P,ERRPNT
15600		ASCIZ/RENAME FOR DELETE FAILED!
15700	/
15800	NODEL:	RELEASE DSK,
15900		SKIPGE DET
16000		PUSHJ P,XERR
16100		PUSHJ P,ERRPNT
16200		ASCIZ/ALL DONE!
16300	/
16400		CALLI 12		;LEAVE
16500	
16600	NOXGP:	PUSHJ P,DETCHK
16700		PUSHJ P,XERR
16800		PUSHJ P,ERRPNT
16900	   	ASCIZ /
17000	WAITING FOR XGP /
17100	;ZZ	ASCIZ /
17200	;ZZXGP BUSY, OUTPUT TO DISK? /
17300	;ZZ	INCHRW A
17400	;ZZ	CAIE A,"Y"
17500	;ZZ	CAIN A,"y"
17600	;ZZ	JRST OUTFIL
17700		HRRZI A,1017
17800		HRRZM A,XNIT
17900	;;;	POPJ P,
18000		JRST XGPOUT
18100	
18200	XNIT:	417
18300		'XGP   '
18400		0
18500	XGPPTR:	BLOCK 2
18600	
18700	IFN LSTBIT-1,<
18800	XFIX:	MOVE A,[LSTBIT-1]
18900		HRRZ C,JOBREL
19000		HRRZ D,XGPPTR
19100	XFIXL:	ANDCAM A,LBUFL-1+2(D)
19200		ADDI D,LBUFL+1
19300		CAIGE D,(C)
19400		JRST XFIXL
19500		POPJ P,
19600	>
19700	CORDWN:	MOVE T,JOBFF
19800		SUBI T,1
19900		CALLI T,11
20000		JRST 4,.
20100		POPJ P,
20200	
     

00100	INBITS:	PUSHJ P,NAMGET		;INPUT OLD BIT FILE
00200		HRRZ U,JOBFF
00300		HRRZI T,177(U)
00400		CORE T,
00500		JRST INBITS
00600		SOJ U,
00700		HRLI U,-200
00800		OPEN [17↔'DSK   '↔0]
00900		JRST INBITS
01000		LOOKUP FILNAM
01100		JRST INBITS
01200		SETZ 10,
01300	TRYTRY:	OPEN XGP,XNIT	  ;***** GRAB THE XGP BEFORE CORE EXPANSION
01400		JRST NONO    	 ;CAN'T GET IT!
01500		INPUT U
01600		MOVE T,[BYTE (12)4001,LMAR,LBUFL]
01700		EXCH T,1(U)
01800		HLL U,T
01900		MOVEM U,XGPPTR
02000		HRLI U,(T)
02100		TLNN U,777777
02200		JRST CLOZE
02300		ADDI U,200
02400		MOVNI T,(T)
02500		ADDI T,(U)
02600		CORE T,
02700		JRST INBITS	;HANG
02800		INPUT U
02900	CLOZE:	RELEAS
03000		JRST XGPOUT
03100	
03200	NONO:	OUTSTR[ASCIZ/
03300	WAITING FOR XGP  /]
03400		HRRZI A,1017
03500		HRRZM A,XNIT
03600		JRST TRYTRY
03700	
03800	OUTFIL:	PUSHJ P,NAMGET		;OUTPUT BIT FILE
03900		MOVE U,XGPPTR
04000		HLRO T,U
04100		MOVNS T
04200		TRZ T,177
04300		HRRZI A,200(T)
04400		ADDI A,(U)
04500		CORE A,
04600		JRST OUTFIL
04700		MOVNS T
04800		HLL T,U			;FIRST WD IS WC-200,-WC
04900		MOVEM T,1(U)
05000		HRLI U,-200(T)
05100		SETZ 10,
05200		OPEN [17↔'DSK   '↔0]
05300		JRST 4,.
05400		ENTER FILNAM
05500		CAIA
05600		OUTPUT U
05700		RELEAS
05800		JRST NODEL
05900	
     

00100	;CORUP
00200	
00300	CORUP:
00400	
00500	REPEAT 0,<	OLD WAY - FLUSHED BY REG 1-3-76
00600	
00700		HRRZ B,JOBCNI
00800		CAIE B,20000
00900		DISMIS
01000		MOVE A,JOBTPC
01100		MOVEM A,IPC+1
01200		UWAIT
01300		DEBREAK
01400	>;END REPEAT 0
01500	
01600	BUST:	MOVEM	1,SVONE#
01700	 	MOVEM	2,SVTWO#
01800		MOVEM	TT,SVTTT#
01900		MOVE	1,JOBCNI	;REG  GET APR CONI BITS
02000		TRNN	1,20000		;REG  IS THERE AN MPV?
02100		JRST	NOMPV		;REG  NO
02200		HRRZ	1,JOBREL	;OLD CORE SIZE
02300		MOVSI	2,1(1)		;FIRST NEW WORD WE'LL GET
02400		HRRI	2,2(1)		;SECOND NEW WORD  - 2 HAS A BLT POINTER.
02500		ADDI	1,16000
02600	;;	ADDI	1,10000		;GET ANOTHER 8K
02700		MOVE	TT,1
02800		CORE	1,
02900		PUSHJ	P,CORLUZ
03000		HRRZ	1,JOBREL
03100		SETZM	-1(2)
03200	 	BLT	2,(1)		;ZERO NEW CORE
03300		MOVE	1,SVONE
03400	 	MOVE	2,SVTWO
03500		MOVE	TT,SVTTT
03600	
03700	REPEAT 0,<
03800		INTJEN IPC
03900	>
04000	
04100		JRST	2,@JOBTPC	;REG  THIS IS HOW TO DISMISS OLD INTERRUPT
04200	
04300	NOMPV:	OUTSTR	[ASCIZ/UNEXPECTED INTERRUPT?
04400	/]
04500		JRST	2,@JOBTPC
04600	
04700	CORLUZ:	MOVE T,TT
04800		LSH T,-12
04900		PUSH P,T
05000		PUSHJ P,DETCHK
05100		PUSHJ P,XERR
05200		POP P,T
05300		PUSHJ P,DECOUT
05400		PUSHJ P,ERRPNT
05500		ASCIZ / K OF CORE NEEDED!
05600	/
05700		SKIPGE DET
05800		CALLI 12
05900		JRST ASKLEN
06000	
06100	FNF:	PUSHJ P,DETCHK		;FILE NOT FOUND
06200		PUSHJ P,XERR
06300		PUSHJ P,ERRPNT
06400		ASCIZ /LOOKUP FAILED.
06500	/
06600		SKIPGE DET
06700		CALLI 12
06800		JRST FILIN
06900	
     

00100	;******** TYPE '4' FOR 4X4 DOTS, TYPE '9' FOR 9X9 DOTS.***********
00200	
00300	FRD:	MOVSI A,'PLT'		;FILE SCAN
00400		MOVEM A,FILEXT
00500		SKIPN GO
00600		JRST .+3		;GO?
00700		MOVEI C,12		; CR
00800		JRST .+3
00900		PUSHJ P,GETNAM
01000		CAME A,[SIXBIT/G/]	;G ALONE = 'GO'
01100		JRST GOX
01200		SETOM GO		;GO BACK AND USE DEFAULT NAME.
01300		POPJ P,
01400	
01500	;;GOX:	CAME A,[SIXBIT/:/]	;FOR * FOUR
01600	GOX:	CAME A,[SIXBIT/4/]	;FOR * FOUR
01700		JRST CKSEMI
01800		AOS SPREAD
01900	POPBAC:	POP P,A
02200		CLRBFI
02300		JRST FILIN
02400	CKSEMI:	CAME A,[SIXBIT/9/]		;FOR * NINE
02500	;;CKSEMI:	CAME A,[SIXBIT/;/]
02600		JRST CKDEFA
02700		SETOM SPREAD
02800		JRST POPBAC
02900	CKDEFA:	SKIPN A
03000	 	MOVE A,['PLT   ']
03100	    	MOVEM A,FILNAM
03200		CAIE C,"."
03300		JRST NOEXT
03400		PUSHJ P,GETNAM
03500		MOVEM A,FILEXT
03600	NOEXT:	CAIE C,"["
03700		JRST FRDX
03800		PUSHJ P,GETP
03900		HRLZM A,FILPPN
04000		PUSHJ P,GETP
04100		HRRM A,FILPPN
04200	FRDX:	SKIPN GO
04300		INCHRW C
04400		CAIE C,12
04500		JRST FRDX
04600		POPJ P,
04700	
04800	RNUM:	INCHWL C		;NUM SCAN
04900		CAIN C,15
05000		JRST RNUM
05100		CAIN C,12
05200		POPJ P,
05300		AOS (P)
05400		MOVEI A,
05500		SETZM SIGN
05600		CAIN C,"-"
05700		JRST [	PUSHJ P,RNUML
05800			SETOM SIGN
05900			MOVN A,A
06000			POPJ P,]
06100		CAIN C,"+"
06200	RNUML:	INCHWL C
06300		CAIL C,"0"
06400		CAILE C,"9"
06500		JRST RNUMX
06600		IMULI A,12
06700		ADDI A,-"0"(C)
06800		JRST RNUML
06900	
07000	RNUMX:	CAIN C,15
07100		INCHRW C
07200		POPJ P,
07300	
     

00100	GETNAM:	MOVEI A,		;FILE SCAN
00200		MOVE B,[440600,,A]
00300	GETNML:	PUSHJ P,RCH
00400		POPJ P,
00500		SUBI C,40
00600		TLNE B,770000
00700		IDPB C,B
00800		JRST GETNML
00900	
01000	GETP:	MOVEI A,
01100	GETPL:	PUSHJ P,RCH
01200		POPJ P,
01300		TRNE A,770000
01400		JRST GETPL
01500		LSH A,6
01600		ADDI A,-40(C)
01700		JRST GETPL
01800	
01900	RCH:	INCHWL C
02000		CAIN C,42
02100		JRST RCHQ
02200		CAIE C,11
02300		CAIN C," "
02400		JRST RCH
02500		CAIE C,"."
02600		CAIN C,","
02700		POPJ P,
02800		CAIE C,"["
02900		CAIN C,"]"
03000		POPJ P,
03100	RCHQR:	CAIGE C,40
03200		POPJ P,
03300		CAIL C,"a"
03400		CAILE C,"z"
03500		CAIA
03600		SUBI C,40
03700		JRST POPJ1
03800	
03900	RCHQ:	INCHWL C
04000		JRST RCHQR
04100	
04200	NAMGET:	CLRBFI
04300		OUTSTR [ASCIZ/
04400		FILE = /]
04500		SETZM FILEXT+1
04600		SETZM FILPPN
04700		MOVSI A,'BIT'
04800		MOVEM A,FILEXT
04900		PUSHJ P,GETNAM
05000		SKIPN A
05100	 	MOVE A,['PLT   ']
05200	    	MOVEM A,FILNAM
05300		CAIE C,"."
05400		JRST NOEXTN
05500		PUSHJ P,GETNAM
05600		MOVEM A,FILEXT
05700	NOEXTN:	CAIE C,"["
05800		JRST FFDX
05900		PUSHJ P,GETP
06000		HRLZM A,FILPPN
06100		PUSHJ P,GETP
06200		HRRM A,FILPPN
06300	FFDX:	INCHRW C
06400		CAIE C,12
06500		JRST FFDX
06600		POPJ P,
06700	
     

00100	FILNAM:	0			;GLOPS OF JUNK
00200	FILEXT:	0
00300		0
00400	FILPPN:	0
00500	
00600	LKENT:	BLOCK 4
00700	
00800	XGSNAM:	0
00900	XGSEXT:	0
01000		0
01100	XGSPPN:	0
01200	
01300	IBUF:	BLOCK 3
01400	
01500	BITTAB:	FOR I←43,0,-1{1⊗I
01600	}
01700	BYTTAB:	FOR I←36,0,-6{REPEAT 6,{77⊗I}}
01800	
01900	DBUF:	BLOCK LBUFL+2
02000	
02100	PDL:	BLOCK LPDL
02200	
02300	END BEG